package com.zwh.se.number;

/**
 * @author yexi
 * Math 类包含用于执行基本数学运算的方法，如初等指数、对数、平方根和三角函数。
 * PS:然而计算浮点数时依旧存在精度丢失问题,届时还是用BigDecimal处理
 */
public class MathDemo {
    public static void main(String[] args) {
        System.out.println("--------1>向上取整/向下取整--------");
        double t = 9.1;
        //返回比t大的最小整数==>向上取整(返回值是double值),ceil原意是天花板
        double r1 = Math.ceil(t);
        System.out.println(r1);//10.0
        //返回比t小的最大整数==>向下取整(返回值是double值)
        double r2 = Math.floor(t);
        System.out.println(r2);//9.0

        System.out.println("--------2>求最大值/求最小值--------");
        System.out.println(Math.max(10, 20));
        System.out.println(Math.min(10, 20));

        System.out.println("--------3>随机数--------");
        //返回一个[0,1)之间的double值
        System.out.println(Math.random());//本质上调用的是 new Random().nextDouble()

        // 以下是一个算法的简单运用：
        //[10,20]之间的随机整数
        //[0,1) * 10 ==> [0,10)+10 ==> [10,20)
        //[0,1) * 11 ==> [0,11)+10 ==> (int)[10,21)==> [10,20]
        //[0,1) * 11 ==> (int)[0,11) ==> [0,10]+10 ==> [10,20]
        //[21,34]
        //[0,1) * 14 ==> (int)[0,14) ==> [0,13] +21 ==>[21,34]
        //[m,n]之间的随机整数
        //[0,1) * (n-m+1) ==> (int)[0,n-m+1) ==> [0,n-m] +m ==> [m,n]

        //记住
        //(int)(Math.random()*(n-m+1)+m;
        int m = 10;
        int n = 20;
        for (int i = 0; i < 100; i++) {
            System.out.println((int) (Math.random() * (n - m + 1)) + 10);
        }

        System.out.println("--------4>常用数学运算--------");
        System.out.println(Math.pow(10, 3));//返回第一个参数的第二个参数次幂的值，也就是a的b次方
        System.out.println(Math.sqrt(2.2));//求平方根
        System.out.println(Math.cbrt(3));//求立方根
        System.out.println(Math.round(3.556f));//四舍五入到最接近的int值
        System.out.println(Math.abs(-3.56));//返回操作数的绝对值。


    }
}
